﻿using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using GestionSaludOcupacional.Portal.App_Start;
using GestionSaludOcupacional.Portal.Base.ViewModels.HistoriaClinica;
using Gestion.Common.Extensions;

namespace GestionSaludOcupacional.Portal.Controllers
{
    public class HistoriaController : Controller
    {
        [Import]
        public Facade Facade;
        //
        // GET: /Historia/

        public ActionResult Index(int id, int citaId, int? key)
        {
            
            var schema = new HistoriaClinicaRegistroViewModel
            {
                HistoriaClinicaPacienteId = id,
                IdCita = citaId,
                FechaIngreso = string.Empty,
                Anamnesis = new AnamnesisViewModel(),
                Fisico = new ExamenFisicoViewModel(),
                FactorRiesgo = new FactorRiesgoViewModel(),
                Antecedentes = new AntecedenteEnfermedadViewModel()
            };

            if (key.HasValue)
            {
                schema.Id = key.Value;
            }

            ViewBag.Model = schema;
            return View();
        }


        private HistoriaClinicaRegistroViewModel ObtenerHistoria(int registroId)
        {
            var schema = new HistoriaClinicaRegistroViewModel();

            var data = Facade.HealthService.ObtenerHistoriaClinicaRegistro(registroId);
            if (data != null)
                schema = Facade.MappingService.GetViewModel(data);

            if (schema.Fisico == null) schema.Fisico = new ExamenFisicoViewModel();
            if (schema.Anamnesis == null) schema.Anamnesis = new AnamnesisViewModel();
            if (schema.Antecedentes == null) schema.Antecedentes = new AntecedenteEnfermedadViewModel();
            if (schema.FactorRiesgo == null) schema.FactorRiesgo = new FactorRiesgoViewModel();

            return schema;
        }

        public JsonResult ObtenerIncidenteHistoriaClinica(int registroId)
        {
            var schema = ObtenerHistoria(registroId);
            if (schema != null)
            {
                if (!string.IsNullOrWhiteSpace(schema.FechaIngreso))
                    schema.FechaIngreso = DateTime.Parse(schema.FechaIngreso).ToShortDateString();
            }
            return Json(new { schema }, JsonRequestBehavior.AllowGet);
        }

        [HttpPost]
        public JsonResult Guardar(HistoriaClinicaRegistroViewModel historiaClinicaRegistro)
        {
            // Validation Model
            if (ModelState.IsValid)
            {
                if (!string.IsNullOrWhiteSpace(historiaClinicaRegistro.FechaIngreso))
                    historiaClinicaRegistro.FechaIngreso = DateTime.Parse(historiaClinicaRegistro.FechaIngreso).ToShortDateString();
                var isValid = Facade.GuardarHistorial(historiaClinicaRegistro);
                return Json(new { isValid });
            }
            return Json(new { isValid = false, message = ModelState.GetErrors() }, JsonRequestBehavior.AllowGet);
        }

        public JsonResult ObtenerIncidentesHistoriaClinica(int idPaciente)
        {
            IEnumerable<HistoriaClinicaRegistroViewModel> schema = null;
            var data = Facade.HealthService.ObtenerHistoriaClinicaIndividuo(idPaciente);
            if (data != null)
            {
                schema = Facade.MappingService.GetAllViewModel(data.HistoriaClinicaRegistros).ToList();
                schema.ForEach(x =>
                {
                    if (!string.IsNullOrWhiteSpace(x.FechaIngreso))
                        x.FechaIngreso = DateTime.Parse(x.FechaIngreso).ToShortDateString();
                });
            }
            return Json(new { schema }, JsonRequestBehavior.AllowGet);
        }
    }
}
